import java.util.*;

/**
 * 部门枚举类
 */
public interface DepartmentEnum {
    /**
     * 党建办
     */
    Long DJB=1636305732690272257L;
    /**
     * 办公室
     */
    Long OFFICE=1628657926114639873L;
    /**
     * 项目管理组
     */
    Long XMGLZ=1636306397948829698L;
    /**
     * 管线维修组
     */
    Long GXWXZ=1636306620850921473L;
    /**
     * 入网受理组
     */
    Long RWSLZ=1636306934354173954L;
    /**
     * 水质监察组
     */
    Long SZJCZ=1636307072908812289L;
    /**
     * 营业窗口组
     */
    Long YYCKZ=1636307221047435266L;
    /**
     * 内勤组
     */
    Long NQZ=1636307564279914498L;
    /**
     * 数智排水指挥中心
     */
    Long SZPSZHZX=1636307852189523969L;
    /**
     * 农污运维管理组
     */
    Long NWYWGLZ=1636308029050740738L;
    /**
     * 机电设备管理组
     */
    Long JDSBGLZ=1636308163302023169L;
    /**
     * 管网运维管理组
     */
    Long GWYWGLZ=1636308321376952322L;
    /**
     * 管线维修管理组
     */
    Long GXWXGLZ=1636308475358240769L;

    /**
     * 企业物联管理组
     */
    Long QYWLGLZ=1636308597139857409L;

    /**
     * 工程管理部
     */
    Long GCGLB=1628658397885759489L;
    /**
     * 运行信息部
     */
    Long YXXXB=1628658681097748482L;

    /**
     * 营业检察部
     */
    Long YYJCB=1628658617335939073L;

    /**
     * 安全管理部
     */
    Long AQGLB=1628658444224430081L;

    /**
     * 财务管理部
     */
    Long CWGLB=1628658332093906945L;

    /**
     * 百官所
     */
    Long BGS=1628658740057079809L;
    /**
     *曹娥所
     */
    Long CES=1628658807237246977L;
    /**
     *崧厦所
     */
    Long SXS=1628658916058464258L;
    /**
     *小越所
     */
    Long XYS=1628658995632799746L;
    /**
     *章镇所
     */
    Long ZZS=1628659443789987841L;
    /**
     *丰惠所
     */
    Long FHS=1629009411428065281L;

    /**
     * 六所
     */
    List<Long> OPERATION_OFFICE_LIST = Arrays.asList(BGS, CES, SXS, XYS, ZZS, FHS);

    /**
     * 两办
     */
    List<Long> TOW_OFFICE_LIST= Arrays.asList(DJB,OFFICE);
    /**
     * 五部
     */
    List<Long> FIVE_DEPARTMENT_LIST= Arrays.asList(GCGLB,YXXXB,YYJCB,AQGLB,CWGLB);

    /**
     * 工程管理部下属部门
     */
    List<Long> GCGLB_SUBORDINATE_DEPARTMENTS_LIST= Arrays.asList(XMGLZ,GXWXGLZ);
    /**
     * 营业检察部下属部门
     */
    List<Long> YYJCB_SUBORDINATE_DEPARTMENTS_LIST= Arrays.asList(RWSLZ,SZJCZ,YYCKZ);
    /**
     * 运管信息部下属部门
     */
    List<Long> YXXXB_SUBORDINATE_DEPARTMENTS_LIST= Arrays.asList(NQZ,SZPSZHZX,NWYWGLZ,JDSBGLZ,GWYWGLZ,QYWLGLZ);

    /**
     * 一级部门
     */
    List<Long> ONE_DEPARTMENTS_LIST=Arrays.asList(BGS,CES,SXS,XYS,ZZS,FHS,
            GCGLB,YXXXB,YYJCB,AQGLB,CWGLB,
            OFFICE,DJB
    );

    /**
     * 获取组的上级部门id
     * @return
     */
    public static Long getCreateSuperiorDept(Long deptId) throws Exception {
        if (ONE_DEPARTMENTS_LIST.contains(deptId)){
            return deptId;
        }
        if (GCGLB_SUBORDINATE_DEPARTMENTS_LIST.contains(deptId)){
            return GCGLB;
        }
        if (YYJCB_SUBORDINATE_DEPARTMENTS_LIST.contains(deptId)){
            return YYJCB;
        }
        if (YXXXB_SUBORDINATE_DEPARTMENTS_LIST.contains(deptId)){
            return YXXXB;
        }
        throw new Exception("部门信息异常,请联系管理员");
    }

    /**
     * 获取下级部门id
     *
     * @return
     */
    public static List<Long> getSubordinateDept(Long deptId) {
        List<Long> longs=null;

        //一级部门的
        if (ONE_DEPARTMENTS_LIST.contains(deptId)) {
            longs=new ArrayList<>();
            longs.add(deptId);
            if (GCGLB.equals(deptId)){
                longs.addAll(GCGLB_SUBORDINATE_DEPARTMENTS_LIST);
            }else if (YYJCB.equals(deptId)){
                longs.addAll(YYJCB_SUBORDINATE_DEPARTMENTS_LIST);
            } else if (YXXXB.equals(deptId)){
                longs.addAll(YXXXB_SUBORDINATE_DEPARTMENTS_LIST);
            }
            //非一级部门
        }
        return longs;
    }
    Map<Long,String> ID_NAME_MAP=new HashMap<Long,String>(){
        {
            put(DJB,"党建办");
            put(OFFICE,"办公室");
            put(XMGLZ,"项目管理组");
            put(RWSLZ,"入网受理组");
            put(SZJCZ,"水质监察组");
            put(YYCKZ,"营业窗口组");
            put(NQZ,"内勤组");
            put(SZPSZHZX,"数智排水指挥中心");
            put(NWYWGLZ,"农污运维管理组");
            put(JDSBGLZ,"机电设备管理组");
            put(GWYWGLZ,"管网运维管理组");
            put(GXWXGLZ,"管线维修管理组");
            put(QYWLGLZ,"企业物联管理组");
            put(GCGLB,"工程管理部");
            put(YXXXB,"运管信息部");
            put(YYJCB,"营业检察部");
            put(AQGLB,"安全管理部");
            put(CWGLB,"财务管理部");
            put(BGS,"百官所");
            put(CES,"曹娥所");
            put(SXS,"崧厦所");
            put(XYS,"小越所");
            put(ZZS,"章镇所");
            put(FHS,"丰惠所");

        }
    };
    Map<String,Long> NAME_ID_MAP=new HashMap<String,Long>(){
        {
            put("党建办",DJB);
            put("办公室",OFFICE);
            put("项目管理组",XMGLZ);
            put("入网受理组",RWSLZ);
            put("水质监察组",SZJCZ);
            put("营业窗口组",YYCKZ);
            put("内勤组",NQZ);
            put("数智排水指挥中心",SZPSZHZX);
            put("农污运维管理组",NWYWGLZ);
            put("机电设备管理组",JDSBGLZ);
            put("管网运维管理组",GWYWGLZ);
            put("管线维修管理组",GXWXGLZ);
            put("企业物联管理组",QYWLGLZ);
            put("工程管理部",GCGLB);
            put("运管信息部",YXXXB);
            put("营业检察部",YYJCB);
            put("安全管理部",AQGLB);
            put("财务管理部",CWGLB);
            put("百官所",BGS);
            put("曹娥所",CES);
            put("崧厦所",SXS);
            put("小越所",XYS);
            put("章镇所",ZZS);
            put("丰惠所",FHS);

        }
    };
    Map<Long,String> ID_FULLNAME_MAP=new HashMap<Long,String>(){
        {
            put(DJB,"党建办");
            put(OFFICE,"办公室");
            put(XMGLZ,"工程管理部_项目管理组");
            put(RWSLZ,"营业检察部_入网受理组");
            put(SZJCZ,"营业检察部_水质监察组");
            put(YYCKZ,"营业检察部_营业窗口组");
            put(NQZ,"运管信息部_内勤组");
            put(SZPSZHZX,"运管信息部_数智排水指挥中心");
            put(NWYWGLZ,"运管信息部_农污运维管理组");
            put(JDSBGLZ,"运管信息部_机电设备管理组");
            put(GWYWGLZ,"运管信息部_管网运维管理组");
            put(GXWXGLZ,"工程管理部_管线维修管理组");
            put(QYWLGLZ,"运管信息部_企业物联管理组");
            put(GCGLB,"工程管理部");
            put(YXXXB,"运管信息部");
            put(YYJCB,"营业检察部");
            put(AQGLB,"安全管理部");
            put(CWGLB,"财务管理部");
            put(BGS,"百官所");
            put(CES,"曹娥所");
            put(SXS,"崧厦所");
            put(XYS,"小越所");
            put(ZZS,"章镇所");
            put(FHS,"丰惠所");

        }
    };


}
